Skip to content

fix(desktop): 修复 JCEF 首帧可见区域时序 - #21

Closed
generalio wants to merge 1 commit into
mainfrom
codex/fix/desktop-visible-layout
Closed

fix(desktop): 修复 JCEF 首帧可见区域时序#21
generalio wants to merge 1 commit into
mainfrom
codex/fix/desktop-visible-layout

Conversation

@generalio

Copy link
Copy Markdown
Owner

目的

修复 Compose Desktop 的 SwingPanel 初始布局中组件尺寸已就绪、实际可见裁剪区仍为零时,JCEF 过早以无原生父窗口路径创建,导致页面必须拖动或缩放窗口后才显示的问题。

改动内容

  • 浏览器创建协调器同时等待 showing、有效尺寸和有效可见裁剪区。
  • 监听祖先布局变化,在可见区域就绪后再触发 JCEF 首次绘制与原生父窗口绑定。
  • 首次原生尺寸同步增加稳定重试,保留受控的旧创建路径兜底。
  • 新增可见裁剪区未就绪的回归测试。
  • 开发版本升级为 0.2.9-SNAPSHOT。

平台影响

  • Android:无行为变化。
  • iOS:无行为变化。
  • Desktop:修复 macOS JCEF windowed 模式首次挂载与首次渲染时序。
  • JS/Wasm:无行为变化。

验证命令与结果

  • ./gradlew :webview-desktop:test --tests io.github.multiweb.desktop.DesktopNativeViewAttachmentCoordinatorTest --tests io.github.multiweb.desktop.DesktopInitialNativeViewLayoutCoordinatorTest --no-configuration-cache:通过。
  • ./gradlew :webview-desktop:test --no-configuration-cache:通过。
  • 掌邮执行 ./gradlew :cyxbs-components:base:compileKotlinDesktop --no-configuration-cache:通过。
  • 掌邮 dependencyInsight 确认解析 io.github.generalio.multiweb:webview-compose-jvm:0.2.9-SNAPSHOT。
  • 未自动化操作 地图 → VR 的真实界面:当前桌面 Java 应用的辅助功能读取超时,需在 PR 合并前手动确认无需拖动或缩放窗口即可显示。

风险与兼容性

无公共 API 变更。浏览器会等待 Swing 实际可见区域有效后创建,避免无父窗口创建;若宿主始终未形成可见区域,浏览器将保持等待,这是正确的生命周期约束。JS 桥、Cookie、文件访问、外部导航策略均未修改。

文档变更

已更新相关内部中文 KDoc;无需更新 README。

@generalio

Copy link
Copy Markdown
Owner Author

该草稿 PR 的源分支不符合仓库命名门禁,已迁移至 generalio/fix/desktop-visible-layout 并重新创建 PR。

@generalio generalio closed this Aug 8, 2026
@generalio
generalio deleted the codex/fix/desktop-visible-layout branch August 11, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant